@@ -1,5 +1,6 @@ |
||
| 1 | 1 |
# Changes |
| 2 | 2 |
|
| 3 |
+* Jul 22, 2015 - DataOutputAgent can configure the order of events in the output via `events_order`. |
|
| 3 | 4 |
* Jul 20, 2015 - Control Links (used by the SchedularAgent) are correctly exported in Scenarios. |
| 4 | 5 |
* Jul 20, 2015 - keep\_events\_for was moved from days to seconds; Scenarios have a schema verison. |
| 5 | 6 |
* Jul 1, 2015 - DeDuplicationAgent properly handles destruction of memory. |
@@ -40,11 +40,15 @@ module Agents |
||
| 40 | 40 |
"_contents": "tag contents (can be an object for nesting)" |
| 41 | 41 |
} |
| 42 | 42 |
|
| 43 |
+ # Ordering events in the output |
|
| 44 |
+ |
|
| 45 |
+ #{description_events_order('events in the output')}
|
|
| 46 |
+ |
|
| 43 | 47 |
# Liquid Templating |
| 44 | 48 |
|
| 45 | 49 |
In Liquid templating, the following variable is available: |
| 46 | 50 |
|
| 47 |
- * `events`: An array of events being output, sorted in descending order up to `events_to_show` in number. For example, if source events contain a site title in the `site_title` key, you can refer to it in `template.title` by putting `{{events.first.site_title}}`.
|
|
| 51 |
+ * `events`: An array of events being output, sorted in the given order, up to `events_to_show` in number. For example, if source events contain a site title in the `site_title` key, you can refer to it in `template.title` by putting `{{events.first.site_title}}`.
|
|
| 48 | 52 |
|
| 49 | 53 |
MD |
| 50 | 54 |
end |
@@ -134,7 +138,7 @@ module Agents |
||
| 134 | 138 |
end |
| 135 | 139 |
end |
| 136 | 140 |
|
| 137 |
- source_events = received_events.order(id: :desc).limit(events_to_show).to_a |
|
| 141 |
+ source_events = sort_events(received_events.order(id: :desc).limit(events_to_show).to_a) |
|
| 138 | 142 |
|
| 139 | 143 |
interpolation_context.stack do |
| 140 | 144 |
interpolation_context['events'] = source_events |
@@ -209,6 +209,22 @@ describe Agents::DataOutputAgent do |
||
| 209 | 209 |
}) |
| 210 | 210 |
end |
| 211 | 211 |
|
| 212 |
+ describe 'ordering' do |
|
| 213 |
+ before do |
|
| 214 |
+ agent.options['events_order'] = ['{{title}}']
|
|
| 215 |
+ end |
|
| 216 |
+ |
|
| 217 |
+ it 'can reorder the events_to_show last events based on a Liquid expression' do |
|
| 218 |
+ asc_content, _status, _content_type = agent.receive_web_request({ 'secret' => 'secret2' }, 'get', 'application/json')
|
|
| 219 |
+ expect(asc_content['items'].map {|i| i["title"] }).to eq(["Evolving", "Evolving again", "Evolving yet again with a past date"])
|
|
| 220 |
+ |
|
| 221 |
+ agent.options['events_order'] = [['{{title}}', 'string', true]]
|
|
| 222 |
+ |
|
| 223 |
+ desc_content, _status, _content_type = agent.receive_web_request({ 'secret' => 'secret2' }, 'get', 'application/json')
|
|
| 224 |
+ expect(desc_content['items']).to eq(asc_content['items'].reverse) |
|
| 225 |
+ end |
|
| 226 |
+ end |
|
| 227 |
+ |
|
| 212 | 228 |
describe "interpolating \"events\"" do |
| 213 | 229 |
before do |
| 214 | 230 |
agent.options['template']['title'] = "XKCD comics as a feed{% if events.first.site_title %} ({{events.first.site_title}}){% endif %}"
|